﻿using System.Collections.Generic;
using System.Linq;
using CTS.Data.Domain.Dao;
using CTS.W._150101.Models.Domain.Common.Dao;
using CTS.W._150101.Models.Domain.Object.Client;

namespace CTS.W._150101.Models.Domain.Dao.Client
{
    public class ItemsDetailDao : GenericDao<EntitiesDataContext>
    {
        // Định nghĩa hằng file sql
        public const string ITEMSDETAILDAO_GETINFO_SQL = "ItemsDetailDao_GetInfo.sql";
        public const string ITEMSDETAILDAO_GETLISTEXEMPLAR_SQL = "ItemsDetailDao_GetListExemplar.sql";
        public const string ITEMSDETAILDAO_GETLISTRELATED_SQL = "ItemsDetailDao_GetListRelated.sql";

        /// <summary>
        /// Lấy thông tin sản phẩm
        /// </summary>
        public ItemObject GetInfo(string localeCd, string itemName)
        {
            // Tạo tham số
            var param = new {
                LocaleCd = localeCd,
                ItemName = itemName
            };
            // Kết quả trả về
            return GetObjectByFile<ItemObject>(ITEMSDETAILDAO_GETINFO_SQL, param);
        }

        /// <summary>
        /// Lấy danh sách cùng mẫu
        /// </summary>
        public IList<ItemObject> GetListExemplar(string localeCd, string itemCd, string exemplarCd)
        {
            // Tạo tham số
            var param = new {
                LocaleCd = localeCd,
                ItemCd = itemCd,
                ExemplarCd = exemplarCd
            };
            // Kết quả trả về
            return GetListByFile<ItemObject>(ITEMSDETAILDAO_GETLISTEXEMPLAR_SQL, param);
        }

        /// <summary>
        /// Lấy danh sách liên quan
        /// </summary>
        public IList<ItemObject> GetListRelated(string localeCd, string itemCd, string exemplarCd, string typeCd)
        {
            // Tạo tham số
            var param = new {
                LocaleCd = localeCd,
                ItemCd = itemCd,
                ExemplarCd = exemplarCd,
                TypeCd = typeCd
            };
            // Kết quả trả về
            return GetListByFile<ItemObject>(ITEMSDETAILDAO_GETLISTRELATED_SQL, param);
        }

        /// <summary>
        /// Cập nhật lượt xem
        /// </summary>
        public decimal? UpdateViewCount(string localeCd, string itemCd)
        {
            var linq = from tbl in EntityManager.MAItems
                       where tbl.LocaleCd == localeCd
                       && tbl.ItemCd == itemCd
                       select tbl;
            var entity = linq.SingleOrDefault();
            var viewCount = entity.ViewCount + decimal.One;
            entity.ViewCount = viewCount;
            EntityManager.SubmitChanges();
            return viewCount;
        }
    }
}
